/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agentes;

import comportamientos.ComportamientoEnviar;
import jade.domain.DFService;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import jade.domain.FIPAException;
import jade.domain.FIPANames;
import jade.lang.acl.ACLMessage;
import jade.wrapper.gateway.GatewayAgent;
import transporte.Intermediario;
/**
 *
 *  @author hayner Benavides Moreno y Jorge Hernan Londoño Echeverri
 */
public class AgenteUsuario extends GatewayAgent{

    Intermediario mensajero;// objeto de intermediación entre el servlet y el agente

    public void AgenteUsuario(){
        mensajero=null;
    }

    @Override
    protected void processCommand(Object command) {

        if(command instanceof Intermediario){

            mensajero = (Intermediario) command;// si el comando es una instancia de Intermediario

            ServiceDescription servicedesc = new ServiceDescription();// se establece los servicios a buscar
            servicedesc.setType("extractor");
            servicedesc.setName("agente");

            DFAgentDescription dfad = new DFAgentDescription();
            dfad.addLanguages("castellano");
            dfad.addServices(servicedesc);
            try{
                DFAgentDescription[] descriptor = DFService.search(this, dfad);// se obtiene la lista de  agente que cumplen con el criterio
                ACLMessage mensaje = new ACLMessage(ACLMessage.CFP);// s eprepara el manesaje del contractnet protocol
                mensaje.setProtocol(FIPANames.InteractionProtocol.FIPA_CONTRACT_NET);
                mensaje.setContent("");// se manda vacio porque solo se necesita que lelgue hasta los agentes receptores
                if(descriptor.length > 0){
                    for(int i=0; i<descriptor.length;i++){
                        
                        mensaje.addReceiver(descriptor[i].getName());
                    }
                }

                ComportamientoEnviar ce = new ComportamientoEnviar(this,mensaje, mensajero.getDocumentos(),descriptor.length);
                addBehaviour(ce);
            }
            catch(FIPAException fe){}

            releaseCommand(mensajero);// cuando se envia el mensaje se termina y s elibera, así la pagina jasp puede continuar

        }
        

    }

    @Override
    protected void setup() {
        super.setup();
    }

}
